﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using GestionaleLib;
using GestionaleLib.Controller;

namespace Leaf.View.TipoDocumento
{
    public partial class frmTipoDocumenti : Form
    {
        public frmTipoDocumenti()
        {
            InitializeComponent();
        }

        #region "Testata"
            private frmMain RifMain;
            private FormStatus.StatoForm StatoForm;
            private GestionaleLib.TipoDocumento TipoDocumentoSelezionato;
        #endregion

        public frmTipoDocumenti(frmMain RifMain, GestionaleLib.TipoDocumento TipoDocumento= null
                , FormStatus.StatoForm StatoForm = FormStatus.StatoForm.Nuovo)
        {
            InitializeComponent();
            this.RifMain = RifMain;
            this.StatoForm = StatoForm;
            this.TipoDocumentoSelezionato = TipoDocumento;
            ImpostaStato();
            Elenco();
        }

        public void Aggiorna()
        {
            Elenco();
        }
        private void Elenco()
        {
            Grid.DataSource = null;
            Grid.DataSource = new ctrlTipoDocumenti().Seleziona();
            FormattaGriglia();
        }
        private void Ricerca()
        {
            Grid.DataSource = null;
            Grid.DataSource = new ctrlTipoDocumenti().Seleziona(txtCerca.Text);
            FormattaGriglia();
        }
        private void FormattaGriglia()
        {
            if (Grid.Rows.Count > 0)
                Grid.Columns["Id"].Visible = false;
        }
        private void PulisciCaselle()
        {
            foreach (Control item in pnlMain.Controls)
            {
                if (item is TextBox)
                    item.Text = "";
            }
            this.StatoForm = FormStatus.StatoForm.Nuovo;
            ImpostaStato();
        }

        private void ImpostaStato()
        {
            switch (StatoForm)
            {
                case FormStatus.StatoForm.Nuovo:
                    this.Text = "Nuovo Tipo Documento";
                    break;
                case FormStatus.StatoForm.Modifica:
                    this.Text = "Modifica Tipo Documento";
                    LeggiCampiModifica();
                    break;
            }
        }

        private void LeggiCampiModifica()
        {
            if (TipoDocumentoSelezionato != null)
            {
                txtDesc.Text = TipoDocumentoSelezionato.Descrizione;
                chkVendita.Checked = TipoDocumentoSelezionato.Vendita;
            }
        }

        private void cmdAnnulla_Click(object sender, EventArgs e)
        {
            PulisciCaselle();
            txtDesc.Focus();
        }
        private void cmdCerca_Click(object sender, EventArgs e)
        {
            Ricerca();
        }

        private void Salva()
        {
            if (txtDesc.Text.Equals(""))
            {
                MessageBox.Show("I campi non sono stati inseriti", "", MessageBoxButtons.OK
                    , MessageBoxIcon.Warning);
                return;
            }
            try
            {
                if (StatoForm == FormStatus.StatoForm.Nuovo)
                {
                    GestionaleLib.TipoDocumento TipoDocumento = new GestionaleLib.TipoDocumento(); //crea nuovo guid
                    TipoDocumento.Descrizione = txtDesc.Text;
                    TipoDocumento.Vendita = chkVendita.Checked;
                    new ctrlTipoDocumenti().Nuovo(TipoDocumento);
                }
                else if (StatoForm == FormStatus.StatoForm.Modifica)
                {
                    TipoDocumentoSelezionato.Descrizione = txtDesc.Text;
                    new ctrlTipoDocumenti().Modifica(TipoDocumentoSelezionato);
                }
                Aggiorna();
                cmdAnnulla_Click(null, null);
            }
            catch (FormatException)
            {
                MessageBox.Show("I valori inseriti non corrispondono a quelli richiesti");
            }
            catch (ExceptionErroreInserimento)
            {
                MessageBox.Show("Errore durante la procedura");
            }
            catch (ExceptionErroreModifica)
            {
                MessageBox.Show("Errore durante la procedura");
            }
        }

        private void cmdSalva_Click(object sender, EventArgs e)
        {
            Salva();
        }

        private void cmdModifica_Click(object sender, EventArgs e)
        {
            if (Grid.DataSource != null && Grid.Rows.Count > 0)
            {
                Grid_CellClick(null, null);
                StatoForm = FormStatus.StatoForm.Modifica;
                ImpostaStato();
            }
        }

        private void Grid_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (Grid.DataSource != null &&
                Grid.Rows.Count > 0)
                TipoDocumentoSelezionato = (GestionaleLib.TipoDocumento)Grid.SelectedRows[0].DataBoundItem;
        }

        private void cmdCancella_Click(object sender, EventArgs e)
        {
            if (Grid.DataSource != null &&
                Grid.Rows.Count > 0)
            {
                TipoDocumentoSelezionato = (GestionaleLib.TipoDocumento)Grid.SelectedRows[0].DataBoundItem;
                DialogResult scelta = MessageBox.Show("Vuoi cancellare l'elemento selezionato?"
                    , "", MessageBoxButtons.YesNo, MessageBoxIcon.Warning);
                if (scelta == System.Windows.Forms.DialogResult.Yes)
                {
                    try
                    {
                        new ctrlTipoDocumenti().Cancella(TipoDocumentoSelezionato);
                        Aggiorna();
                        cmdAnnulla_Click(null, null);
                    }
                    catch (ExceptionErroreCancellazione)
                    {
                        MessageBox.Show("Errore durante la procedura");
                    }
                }
            }
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {

        }

    }
}
